package com.demo.wrapper.interfaces;

import com.demo.wrapper.enums.QueryEnum;
import com.demo.wrapper.pojo.Arg;

/**
 * 手动构建搜索条件
 *
 * @param <Wrapper>    条件拼接类，需继承Query接口和Limit接口
 * @param <AggWrapper> 聚合拼接类，需继续Agg接口
 * @param <QueryArg>   手动拼接搜索方法的入参
 * @param <SourceArg>  手动拼接source方法的入参
 * @author 19242
 */
public interface ICustomBuildQueryWrapper<Wrapper extends IEsQueryWrapper<Wrapper> & IEsLimitWrapper<Wrapper, AggWrapper>, AggWrapper extends IEsAggWrapper<AggWrapper, Wrapper>, QueryArg, SourceArg>
        extends IEsQueryWrapper<Wrapper>, IEsLimitWrapper<Wrapper, AggWrapper> {

    /**
     * 自定义搜索条件，适用于不支持的条件，但像bool就没不要手动拼了
     *
     * @param arg
     * @return
     */
    default Wrapper queryBuilder(QueryArg arg) {
        return addQuery(new Arg(QueryEnum.QUERY_BUILDER, arg));
    }

    /**
     * 自定义限制条件
     *
     * @param arg
     * @return
     */
    default Wrapper sourceBuilder(SourceArg arg) {
        return addLimit(new Arg(QueryEnum.SOURCE_BUILDER, arg));
    }

}
